package com.AJava1710D.testHash;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 作者: LCG
 * 日期: 2020/6/30 09:42
 * 描述:
 */
public class TestFanShe00 {

    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {

        Class<UserOO> userOOClass = UserOO.class;

        //构造方法的获取
        Constructor<UserOO> constructor = userOOClass.getConstructor(String.class);

        //如果要访问私有的构造方法的话要设置 setAccessible=true
        constructor.setAccessible(true);
        //使用构造方法创建对象
        UserOO userOO = constructor.newInstance("");


        //属性的访问
        Field userName = userOOClass.getDeclaredField("userName");

        //如果是对公开的属性的访问不需要调用该方法
        userName.setAccessible(true);

        //获取属性上的注解信息
        //userName.getAnnotation();

        //给属性进行赋值
        //参数一 表示该属性对应的实例对象，参数二表示要给这个属性赋的值
        UserOO userOO1=new UserOO("");
        userName.set(userOO1,"5555555");
        //System.out.println("====>"+userOO1.getUserName());

        //表示该属性对应的实例对象
        Object o = userName.get(userOO1);
        //System.out.println("******************8"+o);


        //方法的处理
        Method getUserName = userOOClass.getMethod("getUserName");

        //参数一 表示该方法对应的实例对象
        //参数2 表示方法需要的入参
        Object invoke = getUserName.invoke(userOO1);//该方法可以执行一个method对象

        System.out.println(invoke);




    }

}
